package simulador;

import Utils.LeitorDeDados;
import Utils.SystemConstants;
import eduni.simjava.Sim_stat;
import eduni.simjava.Sim_system;

public class SimulaSistema {

	public static void main(String[] args) {

		String nomeFile = SystemConstants.NOME_FILE;
		LeitorDeDados leitorDados = new LeitorDeDados(nomeFile);

		Integer numRodadas = Integer.parseInt(leitorDados.getDado("RODADAS"));
		Integer tempoEstabilizacao = Integer.parseInt(leitorDados.getDado("TEMPO_ESTABILIZACAO"));
		Integer txSerGerenciador = Integer.parseInt(leitorDados.getDado("TAXA_SERVICO_GERENCIADOR"));
		Integer txSerDown = Integer.parseInt(leitorDados.getDado("TAXA_SERVICO_DOWNLOAD"));
		Integer txSerUp = Integer.parseInt(leitorDados.getDado("TAXA_SERVICO_UPLOAD"));
		Double nivelConfianca = Double.parseDouble(leitorDados.getDado("NIVEL_CONFIANCA"));
		Double acuracia = Double.parseDouble(leitorDados.getDado("ACURACIA"));
		Double probDown = Double.parseDouble(leitorDados.getDado("PROBABILIDA_DOWNLOAD"));

		Sim_system.initialise();


		Source source = new Source("Source", 5);
		Sim_system.add(source);

		Gerenciador servidorGerenciador = new Gerenciador("Gerenciador", txSerGerenciador, probDown);
		Sim_system.add(servidorGerenciador);

		Servidor servidorUpload = new Servidor("servidorUpload", txSerUp);
		Sim_system.add(servidorUpload);

		Servidor servidorDownload = new Servidor("servidorDownload", txSerDown);
		Sim_system.add(servidorDownload);

		Sim_system.link_ports("Source", "saida", "Gerenciador", "entrada");
		Sim_system.link_ports("Gerenciador", "saidaUpload", "servidorUpload", "entrada");
		Sim_system.link_ports("Gerenciador", "saidaDownload", "servidorDownload", "entrada");

		Sim_system.generate_graphs(false);
		Sim_system.set_report_detail(true, true);

		Sim_system.set_termination_condition(Sim_system.INTERVAL_ACCURACY,
				Sim_system.IND_REPLICATIONS, nivelConfianca,
				acuracia, "servidorUpload", Sim_stat.THROUGHPUT);

		Sim_system.run();		        
	}
}

